home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / util / gnu / oleo_src.lha / src / cell.h < prev    next >
C/C++ Source or Header  |  1992-07-27  |  4KB  |  135 lines

  1. /*    Copyright (C) 1990 Free Software Foundation, Inc.
  2.  
  3. This file is part of Oleo, the GNU Spreadsheet.
  4.  
  5. Oleo is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 1, or (at your option)
  8. any later version.
  9.  
  10. Oleo is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with Oleo; see the file COPYING.  If not, write to
  17. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  18.  
  19. /* Various structures and stuff for the spreadsheet */
  20.  
  21. /* A union of possible values for a location in the spreadsheet
  22.    (or a location to evaluate to:  This includes c_r, which
  23.    a VAR, etc may evaluate to, but which no cell can ever contain */
  24.  
  25. union vals {
  26.     double c_d;
  27.     char *c_s;
  28.     long c_l;
  29.     int c_i;
  30.     struct rng c_r;
  31. };
  32.  
  33. /* An actual cell structure.  These cannot be variable-length, since they are
  34.    allocated as a variable-length array on a col structure. */
  35.  
  36. struct cell {
  37.     /* char *cell_string; */
  38.     short cell_flags;
  39.     struct ref_fm *cell_refs_from;
  40.     struct ref_to *cell_refs_to;
  41.     unsigned char *cell_formula;
  42.     unsigned short cell_cycle;
  43.     union vals c_z;
  44. };
  45.  
  46. struct var {
  47.     struct var *var_next;
  48.  
  49.     short var_flags;
  50.     struct rng v_rng;
  51.  
  52. /* This is a list of the cells that reference this variable.  If the variable
  53.    changes, all the cells in the vars new range must be given ref_froms that
  54.    point to these variables */
  55.     struct ref_fm *var_ref_fm;
  56.     /* A variable sized array that holds the var-name. */
  57.     char var_name[1];
  58. };
  59.  
  60. typedef struct cell CELL;
  61.  
  62. #define VAR_UNDEF 1
  63. #define VAR_CELL 2
  64. #define VAR_RANGE 3
  65.  
  66. /* Shorthand for the cell union */
  67. #define cell_flt    c_z.c_d
  68. #define cell_str    c_z.c_s
  69. #define cell_int    c_z.c_l
  70. #define cell_bol    c_z.c_i
  71. #define cell_err    c_z.c_i
  72.  
  73. /* cell_flags is a 16bit value.  These bits have the following values
  74. 15   14   13   12 . 11   10    9    8  . 7    6    5    4  . 3    2    1    0 .
  75. -- Unused -- |Lock| ----Type---- | Justify  | - Format --  | --- Precision ---
  76.  */
  77.  
  78. #define GET_LCK(p)    ((p)->cell_flags & 0x3000)
  79. #define SET_LCK(p,x)    (((p)->cell_flags &= ~0x3000),(p)->cell_flags |= x)
  80.  
  81. #define LCK_DEF        (0x0000)
  82. #define LCK_UNL        (0x1000)
  83. #define LCK_LCK        (0x2000)
  84.  
  85. /* The type of a cell, or of a eval_expression() value */
  86. #define GET_TYP(p)    ((p)->cell_flags & 0x0E00)
  87. #define SET_TYP(p,x)    ((p)->cell_flags &= ~0x0E00,(p)->cell_flags|=(x))
  88. #define TYP_FLT    0x0200
  89. #define TYP_INT    0x0400
  90. #define TYP_STR    0x0600
  91. #define TYP_BOL    0x0800
  92. #define TYP_ERR    0x0A00
  93. /* This for the expression evaluator:  NO cell should be this type */
  94. #define TYP_RNG 0x0E00
  95.  
  96. #define GET_JST(p)    ((p)->cell_flags & 0x0180)
  97. #define SET_JST(p,x)    ((p)->cell_flags &= ~0x0180,(p)->cell_flags|=(x))
  98. #define JST_DEF    0x0000
  99. #define JST_LFT 0x0100
  100. #define JST_RGT 0x0080
  101. #define JST_CNT 0x0180
  102.  
  103. #define GET_FMT(p)    ((p)->cell_flags & 0x007F)
  104. #define SET_FMT(p,x)    ((p)->cell_flags &= ~0x007F,(p)->cell_flags|=(x))
  105. #define GET_PRC(p)    ((p)&0x0F)
  106. #define PRC_FLT    0x0F
  107. #define FMT_DEF 0x0000
  108.  
  109. #define FMT_HID 0x000E
  110. #define FMT_GPH 0x000F
  111.  
  112. #define FMT_DOL 0x001F
  113. #define FMT_CMA 0x002F
  114. #define FMT_PCT 0x003F
  115. #define FMT_USR 0x004F
  116.  
  117. #define FMT_FXT 0x005F
  118. #define FMT_EXP 0x006F
  119. #define FMT_GEN 0x007F
  120.  
  121. #define FMT_MAX 0x007F
  122.  
  123. extern CELL *find_cell EXT2(CELLREF, CELLREF);
  124. extern CELL *find_or_make_cell EXT2(CELLREF, CELLREF);
  125. extern void find_cells_in_range EXT1(struct rng *);
  126. extern void make_cells_in_range EXT1(struct rng *);
  127.  
  128. extern CELL *next_cell_in_range EXT0();
  129. extern CELL *next_row_col_in_range EXT2(CELLREF *, CELLREF *);
  130. extern void no_more_cells EXT0();
  131.  
  132. extern char *decomp EXT3(CELLREF, CELLREF, CELL *);
  133. extern void decomp_free EXT0();
  134.  
  135.